﻿/*
-----------------------------------------------------------------------------
This source file is part of Cell Cloud.

Copyright (c) 2009-2012 Cell Cloud Team (cellcloudproject@gmail.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-----------------------------------------------------------------------------
*/

#ifndef CellResultSet_h
#define CellResultSet_h

#include "CellPrerequisites.h"

namespace cell
{
/** 结果集。
@author
	Jiangwei Xu
*/
class _CellExport ResultSet
{
public:
	/** 构造函数。
	*/
	ResultSet(void);

	/** 析构函数。
	*/
	virtual ~ResultSet(void);

private:
	/** 拷贝构造函数。
	*/
	ResultSet(const ResultSet& other);

public:
	/** 游标绝对定位。
	*/
	virtual bool absolute(int cursor) = 0;

	/** 游标相对定位。
	*/
	virtual bool relative(int cursor) = 0;

	/** 游标移动到数据头。
	*/
	virtual bool first(void) = 0;

	/** 游标移动到数据尾。
	*/
	virtual bool last(void) = 0;

	/** 游标下移一个数据位。
	*/
	virtual bool next(void) = 0;

	/** 游标上移一个数据位。
	*/
	virtual bool previous(void) = 0;

	/** 游标是否在第一个数据位。
	*/
	virtual bool isFirst(void) = 0;

	/** 游标是否在最后一个数据位。
	*/
	virtual bool isLast(void) = 0;

	/** 返回指定游标处字符型数据。
	*/
	virtual char getChar(int index) = 0;

	/** 返回指定游标标签处字符型数据。
	*/
	virtual char getChar(const String& label) = 0;

	/** 返回指定游标处整数型数据。
	*/
	virtual int getInt(int index) = 0;

	/** 返回指定游标标签处整数型数据。
	*/
	virtual int getInt(const String& label) = 0;

	/** 返回指定游标处长整数型数据。
	*/
	virtual long getLong(int index) = 0;

	/** 返回指定游标标签处长整数型数据。
	*/
	virtual long getLong(const String& label) = 0;

	/** 返回指定游标处64bit整数型数据。
	*/
	virtual int64 getInt64(int index) = 0;

	/** 返回指定游标标签处64bit整数型数据。
	*/
	virtual int64 getInt64(const String& label) = 0;

	/** 返回指定游标处字符串型数据。
	*/
	virtual String getString(int index) = 0;

	/** 返回指定游标标签处字符串型数据。
	*/
	virtual String getString(const String& label) = 0;

	/** 返回指定游标处布尔型数据。
	*/
	virtual bool getBool(int index) = 0;

	/** 返回指定游标标签处布尔型数据。
	*/
	virtual bool getBool(const String& label) = 0;

	/** 获取原始数据。
	@return 返回数据长度。
	*/
	virtual int getRaw(const String& label, char* dst, int offset, int length) = 0;

	/** 获取原始数据。
	@return 返回数据长度。
	*/
	virtual int64 getRaw(const String& label, char* dst, int64 offset, int64 length) = 0;

	/**
	*/
	virtual void updateChar(int index, char value) = 0;

	/**
	*/
	virtual void updateChar(const String& label, char value) = 0;

	/**
	*/
	virtual void updateInt(int index, int value) = 0;

	/**
	*/
	virtual void updateInt(const String& label, int value) = 0;

	/**
	*/
	virtual void updateLong(int index, long value) = 0;

	/**
	*/
	virtual void updateLong(const String& label, long value) = 0;

	/**
	*/
	virtual void updateInt64(int index, int64 value) = 0;

	/**
	*/
	virtual void updateInt64(const String& label, int64 value) = 0;

	/**
	*/
	virtual void updateString(int index, const String& value) = 0;

	/**
	*/
	virtual void updateString(const String& label, const String& value) = 0;

	/**
	*/
	virtual void updateBool(int index, bool value) = 0;

	/**
	*/
	virtual void updateBool(const String& label, bool value) = 0;

	/**
	*/
	virtual void updateRaw(const String& label, char* src, int offset, int length) = 0;

	/**
	*/
	virtual void updateRaw(const String& label, char* src, int64 offset, int64 length) = 0;
};
} // end namespace cell

#endif // CellResultSet_h
